import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;

public class Processo extends Identificador implements RetanguloListener,
IElementosChegadaPartida, IOperadoresSemTexto{

	/**
	 * @uml.property name="retangulo"
	 */
	private Rectangle retangulo;

	/**
	 * @uml.property  name="ligacaoSaida"
	 * @uml.associationEnd  inverse="processo:Ligacao"
	 */


	/**
	 * @uml.property  name="ligacaoEntrada"
	 * @uml.associationEnd  multiplicity="(0 -1)" ordering="true" inverse="processo:Ligacao"
	 */
	private LigacaoIdentificadorDestino ligacao;

	/**
		 */
	public Processo(String identificacao, Retangulo retanguloEnvolvente) {
		super(identificacao, retanguloEnvolvente);
	}	

	/**
		 */
	public Processo(Retangulo retanguloEnvolvente) {
		super(retanguloEnvolvente);
		this.retangulo = new Rectangle();
		retanguloEnvolvente.setRetanguloListener(this);
		construirProcesso();
	}

	/**
			 */
	public void construirProcesso() {
		int x = this.retanguloEnvolvente.getPontoSuperiorEsquerdo().getX();
		int y = this.retanguloEnvolvente.getPontoSuperiorEsquerdo().getY();
		int altura = this.retanguloEnvolvente.getTamanho().getAltura();
		int largura = this.retanguloEnvolvente.getTamanho().getLargura();
		this.retangulo = new Rectangle(x, y, altura, largura);
	}

	@Override
	public void retanguloAlterado() {
		construirProcesso();
	}

	/**
		 */
	@Override
	public void desenhar(Graphics graphics) {
		Graphics2D g2 = (Graphics2D) graphics.create();
		g2.draw(retangulo);
		g2.setColor(Color.black);
		g2.drawString(identificacao, this.retanguloEnvolvente
				.getPontoSuperiorEsquerdo().getX() + 10,
				this.retanguloEnvolvente.getPontoSuperiorEsquerdo().getY() + 15);
		g2.dispose();
	}

	/**
			 */
	@Override
	public boolean isSob(Coordenada coordenada) {
		return this.retanguloEnvolvente.contem(coordenada);
	}
	@Override
	public LigacaoIdentificadorDestino associar(
			Identificador identificadorDestino) {
		 this.ligacao = new LigacaoIdentificadorDestino(
				this, identificadorDestino);

		return ligacao;
	}
	@Override
	public boolean podeAssociar(Identificador identificadorDestino) {
		if (ligacao== null&& identificadorDestino!=this)
			return true;
		return false;
	}

}
